Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


tests/frontend/CallPage.test.js 9d5d03a71244f6cfb87e47727ecc44939d05e755 (9d5d03a7) Text, 29.00 KB

Tff7b72import Tb4b4b4{ Te6edf3flushPromisesTb4b4b4, Te6edf3mount Tb4b4b4} Tff7b72from Ta5d6ff"@vue/test-utils"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3describeTb4b4b4, Te6edf3itTb4b4b4, Te6edf3expectTb4b4b4, Te6edf3viTb4b4b4, Te6edf3beforeEachTb4b4b4, Te6edf3afterEach Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72import Te6edf3CallPage Tff7b72from Ta5d6ff"@/components/call/CallPage.vue"Tb4b4b4;

Te6edf3describeTb4b4b4(Ta5d6ff"CallPage.vue"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72let Te6edf3axiosMockTb4b4b4;

Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3axiosMock Tff7b72= Tb4b4b4{
Te6edf3getTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockImplementationTb4b4b4(Tb4b4b4(Te6edf3urlTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3defaultData Tff7b72= Tb4b4b4{
Te6edf3configTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3callsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3call_historyTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3announcesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3voicemailsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3active_callTff7b72: Tff7b72nullTb4b4b4,
Te6edf3discoveryTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3contactsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3profilesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3ringtonesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3voicemailTff7b72: Tb4b4b4{ Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3configTff7b72: Tb4b4b4{ Te6edf3telephone_enabledTff7b72: Tff7b72true Tb4b4b4} Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/history"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3call_historyTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/announces"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3announcesTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/status"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3active_callTff7b72: Tff7b72null Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemail/status"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3has_espeakTff7b72: Tff7b72falseTb4b4b4,
Te6edf3is_recordingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3is_greeting_recordingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3has_greetingTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/voicemails"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3voicemailsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3unread_countTff7b72: T79c0ff0 Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones/status"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3has_custom_ringtoneTff7b72: Tff7b72falseTb4b4b4,
Te6edf3enabledTff7b72: Tff7b72trueTb4b4b4,
Te6edf3filenameTff7b72: Tff7b72nullTb4b4b4,
Te6edf3idTff7b72: Tff7b72nullTb4b4b4,
Te6edf3volumeTff7b72: T79c0ff0.5Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones/"Tb4b4b4) Tff7b72&& Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/audio"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tff7b72new Tffa657ArrayBufferTb4b4b4(T79c0ff0Tb4b4b4) Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/ringtones"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/audio-profiles"Tb4b4b4)Tb4b4b4)
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3audio_profilesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3default_audio_profile_idTff7b72: Tff7b72null Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/contacts/export"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3contactsTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/contacts/check/"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3is_contactTff7b72: Tff7b72falseTb4b4b4, Te6edf3contactTff7b72: Tff7b72null Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/telephone/contacts"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3contactsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3total_countTff7b72: T79c0ff0 Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"/api/v1/contacts"Tb4b4b4)Tb4b4b4) Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{ Te6edf3contactsTff7b72: Tb4b4b4[Tb4b4b4] Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72return Tffa657PromiseTb4b4b4.Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Te6edf3defaultData Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3postTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3patchTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tff7b72deleteTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3api Tff7b72= Te6edf3axiosMockTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72delete Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3mountCallPage Tff7b72= Tb4b4b4(Te6edf3routeQuery Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72return Te6edf3mountTb4b4b4(Te6edf3CallPageTb4b4b4, Tb4b4b4{
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3mocksTff7b72: Tb4b4b4{
Te6edf3$tTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3keyTb4b4b4,
Te6edf3$routeTff7b72: Tb4b4b4{
Te6edf3queryTff7b72: Te6edf3routeQueryTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3stubsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3LoadingSpinnerTff7b72: Tff7b72trueTb4b4b4,
Te6edf3LxmfUserIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3ToggleTff7b72: Tff7b72trueTb4b4b4,
Te6edf3AudioWaveformPlayerTff7b72: Tff7b72trueTb4b4b4,
Te6edf3RingtoneEditorTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"respects tab query parameter on mount"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4{ Te6edf3tabTff7b72: Ta5d6ff"voicemail" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeTabTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"voicemail"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"performs optimistic mute updates"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Setup active call
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tb4b4b4{
Te6edf3statusTff7b72: T79c0ff6Tb4b4b4, T8b949e// ESTABLISHED
Te6edf3is_mic_mutedTff7b72: Tff7b72falseTb4b4b4,
Te6edf3is_speaker_mutedTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Toggle mic
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3toggleMicrophoneTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Should be muted immediately (optimistic)
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCallTb4b4b4.Te6edf3is_mic_mutedTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Te6edf3expectTb4b4b4.Te6edf3stringContainingTb4b4b4(Ta5d6ff"/api/v1/telephone/mute-transmit"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"renders tabs correctly"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// The tabs are hardcoded strings: Phone, Phonebook, Voicemail, Contacts
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Phone"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Phonebook"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Voicemail"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Contacts"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"switches tabs when clicked"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Initial tab should be phone
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeTabTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"phone"Tb4b4b4)Tb4b4b4;

T8b949e// Click Phonebook tab
Tff7b72const Te6edf3buttons Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findAllTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3phonebookTab Tff7b72= Te6edf3buttonsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3bTb4b4b4) Tb4b4b4=> Te6edf3bTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4) Tff7b72=== Ta5d6ff"Phonebook"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3phonebookTabTb4b4b4) Tb4b4b4{
Tff7b72await Te6edf3phonebookTabTb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeTabTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"phonebook"Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Phonebook tab not found"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"displays 'New Call' UI by default when no active call"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"New Call"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff'input[type="text"]'Tb4b4b4)Tb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"renders call hops and interface metadata below address"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tb4b4b4{
Te6edf3statusTff7b72: T79c0ff6Tb4b4b4,
Te6edf3remote_identity_hashTff7b72: Ta5d6ff"ab"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4,
Te6edf3remote_identity_nameTff7b72: Ta5d6ff"Path Test"Tb4b4b4,
Te6edf3path_hopsTff7b72: T79c0ff3Tb4b4b4,
Te6edf3path_interfaceTff7b72: Ta5d6ff"Default Interface"Tb4b4b4,
Te6edf3tx_packetsTff7b72: T79c0ff303Tb4b4b4,
Te6edf3rx_packetsTff7b72: T79c0ff289Tb4b4b4,
Te6edf3tx_bytesTff7b72: T79c0ff35 Tff7b72* T79c0ff1024Tb4b4b4,
Te6edf3rx_bytesTff7b72: T79c0ff82 Tff7b72* T79c0ff1024Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"3 hops"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"Default Interface"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"TX Pkts"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"303"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"RX Pkts"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"289"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"TX Data Out"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"35 KB"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"RX Data In"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"82 KB"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"attempts to place a call when 'Call' button is clicked"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3input Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff'input[type="text"]'Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3inputTb4b4b4.Te6edf3setValueTb4b4b4(Ta5d6ff"test-destination"Tb4b4b4)Tb4b4b4;

T8b949e// Find Call button - it's hardcoded "Call"
Tff7b72const Te6edf3buttons Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findAllTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3callButton Tff7b72= Te6edf3buttonsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3bTb4b4b4) Tb4b4b4=> Te6edf3bTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4) Tff7b72=== Ta5d6ff"Call"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3callButtonTb4b4b4) Tb4b4b4{
Tff7b72await Te6edf3callButtonTb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
T8b949e// CallPage.vue uses window.api.get(`/api/v1/telephone/call/${hashToCall}`)
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(
Te6edf3expectTb4b4b4.Te6edf3stringContainingTb4b4b4(Ta5d6ff"/api/v1/telephone/call/test-destination"Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Call button not found"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

T8b949e// Keep in sync with tests/backend/test_lxst_telephony_profiles_contract.py
Tff7b72const Te6edf3LXST_TELEPHONY_AUDIO_PROFILES_CONTRACT Tff7b72= Tb4b4b4{
Te6edf3default_audio_profile_idTff7b72: T79c0ff64Tb4b4b4,
Te6edf3audio_profilesTff7b72: Tb4b4b4[
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff16Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Ultra Low Bandwidth" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff32Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Very Low Bandwidth" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff48Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Low Bandwidth" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff64Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Medium Quality" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff80Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"High Quality" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff96Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Super High Quality" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff112Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Ultra Low Latency" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3idTff7b72: T79c0ff128Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Low Latency" Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"getAudioProfiles maps API default and profile list (LXST contract)"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueOnceTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Te6edf3LXST_TELEPHONY_AUDIO_PROFILES_CONTRACT Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3getAudioProfilesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioProfilesTb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Te6edf3LXST_TELEPHONY_AUDIO_PROFILES_CONTRACTTb4b4b4.Te6edf3audio_profilesTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3selectedAudioProfileIdTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff64Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"toggleDoNotDisturb patches config"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3do_not_disturb_enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3toggleDoNotDisturbTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3patchTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Te6edf3expectTb4b4b4.Te6edf3stringContainingTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4)Tb4b4b4, Tb4b4b4{
Te6edf3do_not_disturb_enabledTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"toggleAllowCallsFromContactsOnly patches config"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_allow_calls_from_contacts_onlyTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3toggleAllowCallsFromContactsOnlyTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3patchTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Te6edf3expectTb4b4b4.Te6edf3stringContainingTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4)Tb4b4b4, Tb4b4b4{
Te6edf3telephone_allow_calls_from_contacts_onlyTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"toggleTelephoneAnnounceEnabled patches config"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_announce_enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3toggleTelephoneAnnounceEnabledTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3axiosMockTb4b4b4.Te6edf3patchTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Te6edf3expectTb4b4b4.Te6edf3stringContainingTb4b4b4(Ta5d6ff"/api/v1/config"Tb4b4b4)Tb4b4b4, Tb4b4b4{
Te6edf3telephone_announce_enabledTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"ensureWebAudio stops when server reports web audio disabled"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tb4b4b4{ Te6edf3statusTff7b72: T79c0ff6 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3stop Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"stopWebAudio"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ensureWebAudioTb4b4b4(Tb4b4b4{ Te6edf3enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3stopTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"ensureWebAudio stops when no active call despite server enabled"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3stop Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"stopWebAudio"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ensureWebAudioTb4b4b4(Tb4b4b4{ Te6edf3enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3stopTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"ensureWebAudio starts when server enabled and call active even if config flag false"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tb4b4b4{ Te6edf3statusTff7b72: T79c0ff6 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3start Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"startWebAudio"Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tff7b72undefinedTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ensureWebAudioTb4b4b4(Tb4b4b4{ Te6edf3enabledTff7b72: Tff7b72trueTb4b4b4, Te6edf3frame_msTff7b72: T79c0ff48 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3startTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioFrameMsTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff48Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"ensureWebAudio starts when bridge enabled and call active"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tb4b4b4{ Te6edf3statusTff7b72: T79c0ff6 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3start Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"startWebAudio"Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tff7b72undefinedTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ensureWebAudioTb4b4b4(Tb4b4b4{ Te6edf3enabledTff7b72: Tff7b72trueTb4b4b4, Te6edf3frame_msTff7b72: T79c0ff48 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3startTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioFrameMsTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff48Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"ensureWebAudio stops when no active call"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3stop Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"stopWebAudio"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ensureWebAudioTb4b4b4(Tb4b4b4{ Te6edf3enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3stopTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"onToggleWebAudio enabling without active call skips microphone preflight"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3permit Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"requestAudioPermission"Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3patch Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"updateConfig"Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tff7b72undefinedTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onToggleWebAudioTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3permitTb4b4b4)Tb4b4b4.Te6edf3notTb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3patchTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"onToggleWebAudio enabling during active call runs microphone preflight"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tb4b4b4{ Te6edf3statusTff7b72: T79c0ff6 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3permit Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"requestAudioPermission"Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3patch Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"updateConfig"Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tff7b72undefinedTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3start Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"startWebAudio"Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tff7b72undefinedTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3onToggleWebAudioTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3permitTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3patchTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3startTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"getUserMediaWithMicFallback clears stale device id and retries wide open"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3selectedAudioInputId Tff7b72= Ta5d6ff"gone"Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioInputDevices Tff7b72= Tb4b4b4[Tb4b4b4{ Te6edf3kindTff7b72: Ta5d6ff"audioinput"Tb4b4b4, Te6edf3deviceIdTff7b72: Ta5d6ff"gone" Tb4b4b4}Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3err Tff7b72= Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"over"Tb4b4b4)Tb4b4b4;
Te6edf3errTb4b4b4.Te6edf3name Tff7b72= Ta5d6ff"OverconstrainedError"Tb4b4b4;
Tff7b72const Te6edf3fakeStream Tff7b72= Tb4b4b4{ Te6edf3getTracksTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4[Tb4b4b4{ Te6edf3stopTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4] Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3getUserMedia Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockRejectedValueOnceTb4b4b4(Te6edf3errTb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueOnceTb4b4b4(Te6edf3fakeStreamTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3mediaDevices Tff7b72= Tb4b4b4{ Te6edf3getUserMediaTb4b4b4, Te6edf3enumerateDevicesTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4[Tb4b4b4]Tb4b4b4) Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3stream Tff7b72= Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3getUserMediaWithMicFallbackTb4b4b4(Te6edf3mediaDevicesTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3getUserMediaTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTimesTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3selectedAudioInputIdTb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3streamTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3fakeStreamTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"pickWebAudioMicConstraints includes browser audio processing hints"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3selectedAudioInputId Tff7b72= Ta5d6ff"mic-1"Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioInputDevices Tff7b72= Tb4b4b4[Tb4b4b4{ Te6edf3kindTff7b72: Ta5d6ff"audioinput"Tb4b4b4, Te6edf3deviceIdTff7b72: Ta5d6ff"mic-1" Tb4b4b4}Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3mediaDevices Tff7b72= Tb4b4b4{ Te6edf3enumerateDevicesTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4[Tb4b4b4]Tb4b4b4) Tb4b4b4}Tb4b4b4;

Tff7b72const Te6edf3constraints Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3pickWebAudioMicConstraintsTb4b4b4(Te6edf3mediaDevicesTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3constraintsTb4b4b4.Te6edf3audioTb4b4b4.Te6edf3echoCancellationTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3constraintsTb4b4b4.Te6edf3audioTb4b4b4.Te6edf3noiseSuppressionTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3constraintsTb4b4b4.Te6edf3audioTb4b4b4.Te6edf3autoGainControlTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3constraintsTb4b4b4.Te6edf3audioTb4b4b4.Te6edf3deviceIdTb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4{ Te6edf3exactTff7b72: Ta5d6ff"mic-1" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"startWebAudio uses MeshChatXAndroid native bridge when platform is android"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroid Tff7b72= Tb4b4b4{
Te6edf3getPlatformTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Ta5d6ff"android"Tb4b4b4,
Te6edf3startTelephoneNativeAudioTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Ta5d6ff"ok"Tb4b4b4)Tb4b4b4,
Te6edf3stopTelephoneNativeAudioTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3isTelephoneNativeAudioAvailableTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72trueTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tb4b4b4{ Te6edf3statusTff7b72: T79c0ff6 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3bind Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"_bindAndroidNativeTelephone"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3startWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTb4b4b4.Te6edf3startTelephoneNativeAudioTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3bindTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3useAndroidNativeTelephoneTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72delete Tffa657windowTb4b4b4.Te6edf3MeshChatXAndroidTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"startWebAudio disables bridge when media devices API is missing"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tb4b4b4{ Te6edf3statusTff7b72: T79c0ff6 Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3updateConfig Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"updateConfig"Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tff7b72undefinedTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3stopWebAudio Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"stopWebAudio"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3mediaDevicesDescriptor Tff7b72= Tffa657ObjectTb4b4b4.Te6edf3getOwnPropertyDescriptorTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4)Tb4b4b4;
Tffa657ObjectTb4b4b4.Te6edf3definePropertyTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4, Tb4b4b4{
Te6edf3configurableTff7b72: Tff7b72trueTb4b4b4,
Te6edf3valueTff7b72: Tff7b72undefinedTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3startWebAudioTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3configTb4b4b4.Te6edf3telephone_web_audio_enabledTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3updateConfigTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72false Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3stopWebAudioTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3mediaDevicesDescriptorTb4b4b4) Tb4b4b4{
Tffa657ObjectTb4b4b4.Te6edf3definePropertyTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4, Te6edf3mediaDevicesDescriptorTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tffa657ReflectTb4b4b4.Te6edf3deletePropertyTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"requestAudioPermission returns false when media devices API is missing"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3mediaDevicesDescriptor Tff7b72= Tffa657ObjectTb4b4b4.Te6edf3getOwnPropertyDescriptorTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4)Tb4b4b4;
Tffa657ObjectTb4b4b4.Te6edf3definePropertyTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4, Tb4b4b4{
Te6edf3configurableTff7b72: Tff7b72trueTb4b4b4,
Te6edf3valueTff7b72: Tff7b72undefinedTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3requestAudioPermissionTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3resolvesTb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3mediaDevicesDescriptorTb4b4b4) Tb4b4b4{
Tffa657ObjectTb4b4b4.Te6edf3definePropertyTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4, Te6edf3mediaDevicesDescriptorTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tffa657ReflectTb4b4b4.Te6edf3deletePropertyTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"refreshAudioDevices uses default placeholders when media devices API is missing"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioInputDevices Tff7b72= Tb4b4b4[Tb4b4b4{ Te6edf3kindTff7b72: Ta5d6ff"audioinput"Tb4b4b4, Te6edf3deviceIdTff7b72: Ta5d6ff"old-in" Tb4b4b4}Tb4b4b4]Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioOutputDevices Tff7b72= Tb4b4b4[Tb4b4b4{ Te6edf3kindTff7b72: Ta5d6ff"audiooutput"Tb4b4b4, Te6edf3deviceIdTff7b72: Ta5d6ff"old-out" Tb4b4b4}Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3mediaDevicesDescriptor Tff7b72= Tffa657ObjectTb4b4b4.Te6edf3getOwnPropertyDescriptorTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4)Tb4b4b4;
Tffa657ObjectTb4b4b4.Te6edf3definePropertyTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4, Tb4b4b4{
Te6edf3configurableTff7b72: Tff7b72trueTb4b4b4,
Te6edf3valueTff7b72: Tff7b72undefinedTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72try Tb4b4b4{
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3refreshAudioDevicesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioInputDevicesTb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4[
Tb4b4b4{
Te6edf3deviceIdTff7b72: Ta5d6ff"__meshchat_default_in__"Tb4b4b4,
Te6edf3kindTff7b72: Ta5d6ff"audioinput"Tb4b4b4,
Te6edf3labelTff7b72: Ta5d6ff"Default"Tb4b4b4,
Te6edf3groupIdTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioOutputDevicesTb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4[
Tb4b4b4{
Te6edf3deviceIdTff7b72: Ta5d6ff"__meshchat_default_out__"Tb4b4b4,
Te6edf3kindTff7b72: Ta5d6ff"audiooutput"Tb4b4b4,
Te6edf3labelTff7b72: Ta5d6ff"Default"Tb4b4b4,
Te6edf3groupIdTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3mediaDevicesDescriptorTb4b4b4) Tb4b4b4{
Tffa657ObjectTb4b4b4.Te6edf3definePropertyTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4, Te6edf3mediaDevicesDescriptorTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tffa657ReflectTb4b4b4.Te6edf3deletePropertyTb4b4b4(Te6edf3navigatorTb4b4b4, Ta5d6ff"mediaDevices"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"ensureWebAudio tears down websocket stream when call is no longer active"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3config Tff7b72= Tb4b4b4{ Te6edf3telephone_web_audio_enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3activeCall Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3wsClose Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioWs Tff7b72= Tb4b4b4{
Te6edf3onopenTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3onmessageTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3onerrorTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3oncloseTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3closeTff7b72: Te6edf3wsCloseTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3sourceDisconnect Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioSourceNode Tff7b72= Tb4b4b4{ Te6edf3disconnectTff7b72: Te6edf3sourceDisconnect Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3workletDisconnect Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioWorkletNode Tff7b72= Tb4b4b4{
Te6edf3portTff7b72: Tb4b4b4{ Te6edf3onmessageTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3disconnectTff7b72: Te6edf3workletDisconnectTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3stopTrack Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioStream Tff7b72= Tb4b4b4{ Te6edf3getTracksTff7b72: Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4[Tb4b4b4{ Te6edf3stopTff7b72: Te6edf3stopTrack Tb4b4b4}Tb4b4b4] Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3ctxClose Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tff7b72undefinedTb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioCtx Tff7b72= Tb4b4b4{ Te6edf3stateTff7b72: Ta5d6ff"running"Tb4b4b4, Te6edf3closeTff7b72: Te6edf3ctxClose Tb4b4b4}Tb4b4b4;

Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ensureWebAudioTb4b4b4(Tb4b4b4{ Te6edf3enabledTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3wsCloseTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTimesTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3sourceDisconnectTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTimesTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3workletDisconnectTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTimesTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3stopTrackTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTimesTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3ctxCloseTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTimesTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioWsTb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"getContacts maps telephone contacts list and hydrates visuals"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3hydrate Tff7b72= Te6edf3viTb4b4b4.Te6edf3spyOnTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4, Ta5d6ff"hydrateContactVisuals"Tb4b4b4)Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueOnceTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3contactsTff7b72: Tb4b4b4[Tb4b4b4{ Te6edf3idTff7b72: T79c0ff1Tb4b4b4, Te6edf3nameTff7b72: Ta5d6ff"Sam"Tb4b4b4, Te6edf3remote_identity_hashTff7b72: Ta5d6ff"ab"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff16Tb4b4b4) Tb4b4b4}Tb4b4b4]Tb4b4b4,
Te6edf3total_countTff7b72: T79c0ff2Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3getContactsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3contactsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3nameTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"Sam"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3hydrateTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"getVoicemails maps voicemails and unread_count"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueOnceTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3voicemailsTff7b72: Tb4b4b4[Tb4b4b4{ Te6edf3idTff7b72: T79c0ff9Tb4b4b4, Te6edf3remote_identity_hashTff7b72: Ta5d6ff"cd"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4, Te6edf3is_readTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3getVoicemailsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3voicemailsTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3unreadVoicemailsCountTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"getRingtones stores API array on ringtones"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueOnceTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4[
Tb4b4b4{
Te6edf3idTff7b72: T79c0ff1Tb4b4b4,
Te6edf3filenameTff7b72: Ta5d6ff"x.opus"Tb4b4b4,
Te6edf3display_nameTff7b72: Ta5d6ff"Test"Tb4b4b4,
Te6edf3is_primaryTff7b72: Tff7b72trueTb4b4b4,
Te6edf3created_atTff7b72: Ta5d6ff"2024-01-01"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3getRingtonesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ringtonesTb4b4b4)Tb4b4b4.Te6edf3toHaveLengthTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ringtonesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3filenameTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"x.opus"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"getVoicemailStatus stores voicemail status payload"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueOnceTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3has_espeakTff7b72: Tff7b72trueTb4b4b4,
Te6edf3is_recordingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3is_greeting_recordingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3has_greetingTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3getVoicemailStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3voicemailStatusTb4b4b4.Te6edf3has_greetingTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"getRingtoneStatus stores ringtone status payload"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueOnceTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3has_custom_ringtoneTff7b72: Tff7b72trueTb4b4b4,
Te6edf3enabledTff7b72: Tff7b72trueTb4b4b4,
Te6edf3filenameTff7b72: Ta5d6ff"ring.opus"Tb4b4b4,
Te6edf3idTff7b72: T79c0ff3Tb4b4b4,
Te6edf3volumeTff7b72: T79c0ff0.8Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3getRingtoneStatusTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ringtoneStatusTb4b4b4.Te6edf3idTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3ringtoneStatusTb4b4b4.Te6edf3volumeTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0.8Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"resizeAudioVisualizerCanvas scales dimensions for responsive density"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3canvas Tff7b72= Tb4b4b4{ Te6edf3clientWidthTff7b72: T79c0ff320Tb4b4b4, Te6edf3clientHeightTff7b72: T79c0ff80Tb4b4b4, Te6edf3widthTff7b72: T79c0ff0Tb4b4b4, Te6edf3heightTff7b72: T79c0ff0 Tb4b4b4}Tb4b4b4;

Tff7b72const Te6edf3ok Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3resizeAudioVisualizerCanvasTb4b4b4(Te6edf3canvasTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3okTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3canvasTb4b4b4.Te6edf3widthTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff320Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3canvasTb4b4b4.Te6edf3heightTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanOrEqualTb4b4b4(T79c0ff80Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"android native level events feed tx/rx visualizer levels"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3localAudioLevel Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3remoteAudioLevel Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3_bindAndroidNativeTelephoneTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72try Tb4b4b4{
Tffa657windowTb4b4b4.Te6edf3dispatchEventTb4b4b4(
Tff7b72new Te6edf3CustomEventTb4b4b4(Ta5d6ff"meshchatx-native-telephone-audio"Tb4b4b4, Tb4b4b4{
Te6edf3detailTff7b72: Tb4b4b4{ Te6edf3kindTff7b72: Ta5d6ff"levels"Tb4b4b4, Te6edf3tx_levelTff7b72: T79c0ff0.45Tb4b4b4, Te6edf3rx_levelTff7b72: T79c0ff82 Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3localAudioLevelTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanTb4b4b4(T79c0ff0.4Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3remoteAudioLevelTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanTb4b4b4(T79c0ff0.8Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3_unbindAndroidNativeTelephoneTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"playRemotePcm updates RX visualizer level from incoming PCM"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3connect Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3start Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioCtx Tff7b72= Tb4b4b4{
Te6edf3createBufferTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{ Te6edf3copyToChannelTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3createBufferSourceTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{ Te6edf3connectTb4b4b4, Te6edf3startTb4b4b4, Te6edf3bufferTff7b72: Tff7b72null Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3destinationTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3selectedAudioOutputId Tff7b72= Ta5d6ff"__meshchat_default_out__"Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3remoteAudioLevel Tff7b72= T79c0ff0Tb4b4b4;

Tff7b72const Te6edf3pcm Tff7b72= Tff7b72new Tffa657Int16ArrayTb4b4b4(Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff4000Tb4b4b4, Tff7b72-T79c0ff9000Tb4b4b4, T79c0ff12000Tb4b4b4, Tff7b72-T79c0ff15000Tb4b4b4, T79c0ff8000Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3playRemotePcmTb4b4b4(Te6edf3pcmTb4b4b4.Te6edf3bufferTb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3remoteAudioLevelTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3connectTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3startTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"updateVisualizerFromCallStats animates levels without web audio bridge"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioWs Tff7b72= Tff7b72nullTb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3useAndroidNativeTelephone Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3localAudioLevel Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3remoteAudioLevel Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3prevCallTxBytes Tff7b72= T79c0ff1000Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3prevCallRxBytes Tff7b72= T79c0ff2000Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3updateVisualizerFromCallStatsTb4b4b4(
Tb4b4b4{ Te6edf3hashTff7b72: Ta5d6ff"aa"Tb4b4b4, Te6edf3statusTff7b72: T79c0ff6Tb4b4b4, Te6edf3tx_bytesTff7b72: T79c0ff3000Tb4b4b4, Te6edf3rx_bytesTff7b72: T79c0ff4500 Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3hashTff7b72: Ta5d6ff"aa"Tb4b4b4, Te6edf3statusTff7b72: T79c0ff6Tb4b4b4, Te6edf3tx_bytesTff7b72: T79c0ff1000Tb4b4b4, Te6edf3rx_bytesTff7b72: T79c0ff2000 Tb4b4b4}
Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3localAudioLevelTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3remoteAudioLevelTb4b4b4)Tb4b4b4.Te6edf3toBeGreaterThanTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3prevCallTxBytesTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff3000Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3prevCallRxBytesTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff4500Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"updateVisualizerFromCallStats does not override bridge-provided levels"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountCallPageTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3flushPromisesTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3audioWs Tff7b72= Tb4b4b4{ Te6edf3readyStateTff7b72: T79c0ff1 Tb4b4b4}Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3useAndroidNativeTelephone Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3localAudioLevel Tff7b72= T79c0ff0.55Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3remoteAudioLevel Tff7b72= T79c0ff0.42Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3prevCallTxBytes Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3prevCallRxBytes Tff7b72= T79c0ff0Tb4b4b4;

Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3updateVisualizerFromCallStatsTb4b4b4(
Tb4b4b4{ Te6edf3hashTff7b72: Ta5d6ff"bb"Tb4b4b4, Te6edf3statusTff7b72: T79c0ff6Tb4b4b4, Te6edf3tx_bytesTff7b72: T79c0ff9999Tb4b4b4, Te6edf3rx_bytesTff7b72: T79c0ff8888 Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3hashTff7b72: Ta5d6ff"bb"Tb4b4b4, Te6edf3statusTff7b72: T79c0ff6Tb4b4b4, Te6edf3tx_bytesTff7b72: T79c0ff0Tb4b4b4, Te6edf3rx_bytesTff7b72: T79c0ff0 Tb4b4b4}
Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3localAudioLevelTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0.55Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3remoteAudioLevelTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff0.42Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3prevCallTxBytesTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff9999Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3vmTb4b4b4.Te6edf3prevCallRxBytesTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff8888Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────